/**
 * 操作按钮类型
 *
 * @template Params 函数定义的参数类型
 * */
export interface ArkActionButton<Params> {
  /** 按钮文本 */
  text: string;
  /** 是否显示 */
  show?: boolean;

  /** 是否禁用（仅对ArkDialog底部按钮配置生效） */
  disabled?: boolean;

  /** 图标名（仅对ArkActionBar配置生效） */
  icon?: string;
  /** 图标类名（仅对ArkActionBar配置生效） */
  iconClass?: string;

  /**
   * 点击事件
   *
   * ArkDialog（如果是对话框底部按钮，即options.footer）
   * - 当返回值是void时，将关闭对话框
   * - 当返回值是一个boolean类型，只有值为true时才会关闭对话框
   * - 当返回值是一个Promise，只有处于fulfilled状态时才会关闭对话框
   *   - 当Promise状态处为pending时按钮loading
   *   - 当Promise状态为fulfilled时取消按钮loading并关闭对话框
   *   - 当Promise状态为rejected时取消按钮loading但不关闭对话框
   *
   * ArkFilterForm（如果是清除按钮，即options.actions.clear）
   * - 当返回值是void时，将重置表单并执行确认操作(options.actions.confirm)
   * - 当返回值是一个boolean类型，只有值为true时才会重置表单并执行确认操作(options.actions.confirm)
   * - 当返回值是一个Promise，只有处于fulfilled状态时才会重置表单并执行确认操作(options.actions.confirm)
   * */
  onClick?: (params?: Params) => void | boolean | Promise<any>;
  /**
   * 按钮点击之前的钩子函数
   * - 当返回值是void时，不会阻止onClick的执行
   * - 当返回值是一个boolean类型，只有值为true时才不会阻止onClick的执行
   * - 当返回值是一个Promise，只有处于fulfilled状态时不会阻止onClick的执行
   * */
  beforeClick?: () => void | boolean | Promise<any>;
  /** 按钮点击之后的钩子函数。无论onClick返回何值都执行 */
  afterClick?: (clickReturn: void | boolean | Promise<any>) => void | Promise<any>;

  /** 按钮组件v-bind指令参数 */
  attributes?: Record<string, any>;
  /** 按钮组件v-on指令参数 */
  events?: Record<string, any>;
}
